package com.example.orderflow.service;

import java.util.List;

import com.example.orderflow.entity.query.ApproveHistoryQuery;
import com.example.orderflow.entity.po.ApproveHistory;
import com.example.orderflow.entity.vo.PaginationResultVO;
import org.apache.ibatis.annotations.Param;


/**
 *  业务接口
 */
public interface ApproveHistoryService {

	/**
	 * 根据条件查询列表
	 */
	List<ApproveHistory> findListByParam(ApproveHistoryQuery param);

	/**
	 * 根据条件查询列表
	 */
	Integer findCountByParam(ApproveHistoryQuery param);

	/**
	 * 分页查询
	 */
	PaginationResultVO<ApproveHistory> findListByPage(ApproveHistoryQuery param);

	/**
	 * 新增
	 */
	Integer add(ApproveHistory bean);

	/**
	 * 批量新增
	 */
	Integer addBatch(List<ApproveHistory> listBean);

	/**
	 * 批量新增/修改
	 */
	Integer addOrUpdateBatch(List<ApproveHistory> listBean);

	/**
	 * 多条件更新
	 */
	Integer updateByParam(ApproveHistory bean,ApproveHistoryQuery param);

	/**
	 * 多条件删除
	 */
	Integer deleteByParam(ApproveHistoryQuery param);

	/**
	 * 根据Id查询对象
	 */
	ApproveHistory getApproveHistoryById(Integer id);


	/**
	 * 根据Id修改
	 */
	Integer updateApproveHistoryById(ApproveHistory bean,Integer id);


	/**
	 * 根据Id删除
	 */
	Integer deleteApproveHistoryById(Integer id);

	/**
	 * 根据订单编号、当前等级和执行人名称获取对象
	 */
	ApproveHistory getApproveHistoryByOrderIdAndLevelIdAndApproveBy(String orderId, String levelId, String approveBy);

	/**
	 * 根据订单编号、当前等级获取所有审批状态
	 */
	List<String> getApproveStatusByOrderIdAndLevelIdAndObjectState1(String orderId, String levelId);

	/**
	 * 判断审批状态是否全部为”1“
	 */
	boolean isAllApproveStatus(String orderId, String levelId);

	/**
	 * 根据orderId levelId删除
	 */
	Integer deleteApproveHistoryByOrderIdAndLevelId(String orderId, String levelId);

	/**
	 * 创建一个（评论为）默认对象（含数据库操作）
	 * orderId levelId approveBy approveTime approveStatus comment creationdate objectstate
	 * orderId levelId approveBy 前端送递
	 * approveStatus = "未审批"
	 * comment = "默认"
	 * approveTime creationdate = 当前时间
	 * objectstate = "1"
	 */
	ApproveHistory createDefaultApproveHistory(String orderId, String levelId, String approveBy);

	/**
	 * 创建一个（评论为）可编辑对象（含数据库操作）
	 * orderId 订单号 levelId 当前审批等级 approveBy 审批人 approveTime 记录更新时间
	 * approveStatus 审批状态 comment 留言 creationdate  记录创建时间 objectstate 记录状态
	 * orderId levelId approveBy comment前端送递
	 * approveStatus = "未审批"
	 * approveTime creationdate = 当前时间
	 * objectState = "1" 可用
	 */
	ApproveHistory createEditableApproveHistory(String orderId, String levelId, String approveBy,String comment);

	/**
	 * 更改（评论为）默认，单人审核状态
	 * orderId 订单号 前端递送
	 * approveTime = 当前时间
	 * approveStatus = 是否通过
	 */
	ApproveHistory updateDefaultApproveHistory(String orderId, String levelIdS,String approveBy,String approveStatus);

	/**
	 * 更改（评论为）默认，单人审核状态
	 * orderId 订单号 前端递送
	 * approveTime = 当前时间
	 * approveStatus = 是否通过
	 */
	ApproveHistory updateDefaultApproveHistoryObjectState(String orderId, String levelIdS, String approveBy, String approveStatus, String objectState);

	/**
	 * 更改（评论为）默认，单人审核状态
	 * orderId 订单号 前端递送
	 * approveTime = 当前时间
	 * approveStatus = 是否通过
	 */
	ApproveHistory updateCommentApproveHistory(String orderId, String levelIdS,String approveBy,String approveStatus,String comment);

	/**
	 * 根据根据订单编号、当前等级id更新对象状态和编辑时间
	 * 	 * orderId 订单号 levelId 当前审核等级 输入
	 * 	 * approveTime = 当前时间
	 * 	 * objectStates = "0"
	 */
	Integer updateObjectStateAndApproveTimeByOrderIdAndLevelId(String orderId, String levelId);

	/**
	 * 根据审批人、对象状态查找所有符合条件的对象的订单编号
	 */
	List<String> findOrderIdsByApproveByAndObjectState (String approveBy, String objectState);

	/**
	 * 根据审批人、审批结果查找所有符合条件的对象的订单编号
	 */
	List<String> findOrderIdsByApproveByAndApproveStatus (String approveBy, String approveStatus);

	/**
	 * 根据根据订单编号、当前等级id更新对象状态和编辑时间
	 * 	 * orderId 订单号 levelId 当前审核等级 输入
	 * 	 * approveTime = 当前时间
	 * 	 * objectStates = "0"
	 */
	Integer updateObjectStateAndApproveTimeByOrderId(String orderId);

	/**
	 * 根据根据订单编号查询所有复合的条目
	 * orderId 订单号 输入
	 * return List<ApproveHistory>
	 */
	List<ApproveHistory> findApproveHistoryByOrderId(String orderId);

	/**
	 * 根据订单编号、当前等级、执行人名称和对象状态获取对象
	 */
	ApproveHistory getApproveHistoryByOrderIdAndLevelIdAndApproveByAndObjectState(String orderId, String levelId, String approveBy,String objectState);

}